package com.cskaoyan.javase.basic._2variable._3notice;

/**
 * 数据类型转换,Java中变量的数据类型由某一种转换为另一种，我们将这个过程叫做数据类型转换.
 * 数据类型转换从大的分类上来讲,分为两大类的:
 *      1.自动数据类型转换
 *      2.强制数据类型转换
 * 我们以基本数据类型的类型转换为案例,来说明一下.当然首先要明确,基本数据类型的类型转换是在数值类型和char类型之间,boolean不参与类型转换.
 *      数据类型是给编译器看的,数据类型要转换,也需要通知编译器,或者这个转换就是编译器做的.
 *      1.基本数据类型的自动类型转换,表示编译器自动完成数据类型转换,无需程序员手动写代码完成.
 *          条件: 把小取值范围的数据类型转换成大取值范围的数据类型,这个过程是自动完成的.
 *          这个过程一般是比较安全的,数据能够装得下,不会溢出,但它不是绝对安全的.因为浮点数有有效位数限制,
 *          所以整型往浮点型自动类型转换时,可能出现数据失真的情况
 *          char类型比较特殊，在参与数值类型的自动类型转换时，是编码值参与了转换。**而且由于char类型的编码值范围是[0，65535]，所以只有int及以上数据类型的取值范围比char类型大。'
 *
 *      2.基本数据类型的强制类型转换,指的是必须通过程序员写代码手动指示完成类型转换,称之为强制类型转换.
 *          条件: 把大取值范围的数据类型转换成小取值范围的数据类型,这个过程需要手动完成.
 *          语法: 目标数据类型 变量名 = (目标数据类型)变量;
 *          自动类型转换是基本安全的,除了浮点型会有精度问题外,很安全
 *          但是强制类型转换在很多时候都是不安全的,就会导致数值溢出,进而导致数据失真
 *
 *          强制类型转换是非常危险的,如果不是很有必要,尽量不要做.除非是你特别确信不会有问题
 *
 *  引用数据类型也可以完成自动类型转换和强制类型转换,但是需要等面向对象再讲.
 *
 *
 * @since 17:26
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo2 {
    public static void main(String[] args) {
        // 自动类型转换int --> long 小到大
        long a = 100;
        // 自动类型转换long --> float 小到大
        float b = a;
        // 自动类型转换int ---> double 小到大
        double c = 10;

        // 强制类型转换
        float d = (float) 0.1;
        // 快捷键 alt + 回车/".cast"
        float e = ((float) 0.1);

        byte f = ((byte) 128);
        System.out.println(f);

        // 对一个小数取整数位
        double a1 = 100.1;
        int a2 = ((int) a1);
        System.out.println(a2);

    }
}
